---
title: Manage attorney and legal-person reference data
summary: Maintain attorney profiles, conflicts, policy assignments, schedules, legal persons, other firms, and rotation assignments, enforcing duplicate/referential-integrity checks.
status: draft
owner: SAIF Case Management team
last_reviewed: 2026-08-21
library: SAIF.Business.Claim.Legal
reference_type: embedded
operation_id: OP-CLL-015
trigger: Reference-data maintenance user adds, edits, or deletes attorney/firm/person records
---

# Manage attorney and legal-person reference data

Maintain attorney profiles, conflicts, policy assignments, schedules, legal persons, other firms, and rotation assignments, enforcing duplicate/referential-integrity checks.

| Field | Value |
|---|---|
| **Operation ID** | OP-CLL-015 |
| **Trigger** | Reference-data maintenance user adds, edits, or deletes attorney/firm/person records |
| **Inputs** | Business-object criteria properties set by the caller (see linked SQL parameter tables) |
| **Outputs** | Persisted/retrieved `clsAttorneyProfile` state |
| **Primary components** | `clsAttorneyProfile, clsAttorneyConflict, clsAttorneyPolicyAssignment, clsAttorneySchedule, clsAttorneyWorkerAssignment, clsLegalPerson, clsLegalPersonType, clsOtherFirm, clsOutOFTownRotationAssgn` |
| **Entry point** | `SAIF.Business.Claim.Legal\TableMaint\clsAttorneyProfile.vb, TableMaint\clsAttorneyConflict.vb, TableMaint\clsAttorneyPolicyAssignment.vb, TableMaint\clsAttorneySchedule.vb, TableMaint\clsAttorneyWorkerAssignment.vb, TableMaint\clsLegalPerson.vb, TableMaint\clsLegalPersonType.vb, TableMaint\clsOtherFirm.vb, TableMaint\clsOutOFTownRotationAssgn.vb` |

## Steps

1. Validate the request against applicable business rules: [BR-CLM-LGL-006](../business-rules.md#br-clm-lgl-006-attorney-policy-assignment-requires-a-valid-policy), [BR-CLM-LGL-007](../business-rules.md#br-clm-lgl-007-attorney-policy-assignment-requires-a-primary-attorney), [BR-CLM-LGL-008](../business-rules.md#br-clm-lgl-008-attorney-profile-requires-attorney%2C-type%2C-and-valid-date-range), [BR-CLM-LGL-009](../business-rules.md#br-clm-lgl-009-duplicate-attorney-profile-rows-are-rejected), [BR-CLM-LGL-010](../business-rules.md#br-clm-lgl-010-attorney-schedule-entry-requires-attorney%2C-reason%2C-and-duration), [BR-CLM-LGL-011](../business-rules.md#br-clm-lgl-011-attorney-schedule-dates-must-be-valid-and-non-past), [BR-CLM-LGL-014](../business-rules.md#br-clm-lgl-014-legal-person-requires-last-and-first-name), [BR-CLM-LGL-015](../business-rules.md#br-clm-lgl-015-legal-person-cannot-be-deleted-while-referenced), [BR-CLM-LGL-016](../business-rules.md#br-clm-lgl-016-legal-person-type-link-requires-person-and-type-code), [BR-CLM-LGL-017](../business-rules.md#br-clm-lgl-017-other-firm-state-city-must-be-valid), [BR-CLM-LGL-018](../business-rules.md#br-clm-lgl-018-out-of-town-rotation-assignment-dates-must-be-valid-and-non-past)
   - On failure: validation errors are collected and returned to the caller; the operation does not proceed.
2. Execute the underlying data access for `clsAttorneyProfile` against: [DB-CLL-061](../sql/SQL-061-legalperson.md), [DB-CLL-064](../sql/SQL-064-otherfirm.md), [DB-CLL-065-104](../sql/SQL-065-104-attorneyconflict,.md)
   - Tables affected: [ATTORNEY_CONFLICT](../database-tables.md#attorney_conflict), [ATTORNEY_POLICY_ASSIGNMENT](../database-tables.md#attorney_policy_assignment), [ATTORNEY_SCHEDULE](../database-tables.md#attorney_schedule), [ATTORNEY_WORKER_ASSIGNMENT](../database-tables.md#attorney_worker_assignment), [LEGAL_PERSON](../database-tables.md#legal_person), [LEGAL_PERSON_TYPE](../database-tables.md#legal_person_type), [OTHER_FIRM](../database-tables.md#other_firm), [OUT_OF_TOWN_ROTATION_ASSGN](../database-tables.md#out_of_town_rotation_assgn)
3. Return the resulting object graph (or success/failure status) to the caller.

## Process flow

```mermaid
flowchart TD
	Start([Reference-data maintenance user adds, edits, or deletes attorney/firm/person records]) --> Validate[Validate business rules]
	Validate --> Decision{Valid?}
	Decision -->|No| EndErr([Return validation errors])
	Decision -->|Yes| Exec[Execute data access for clsAttorneyProfile]
	Exec --> EndOk([Return result])
```

## Failure and edge-case behavior

- Validation failure: the operation returns collected errors without persisting any change.
- `ValidateState` on this path is **non-parameterized** (raw string concatenation) — see [business-rules.md](../business-rules.md#flagged-findings) for the flagged SQL-injection risk.

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)
- [SQL catalog](../sql/index.md)
- [Database tables](../database-tables.md)

## Sources
- `SAIF.Business.Claim.Legal\` (clsAttorneyProfile, clsAttorneyConflict, clsAttorneyPolicyAssignment, clsAttorneySchedule, clsAttorneyWorkerAssignment, clsLegalPerson, clsLegalPersonType, clsOtherFirm, clsOutOFTownRotationAssgn)